package com.yl.rabbitmq.day12;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.yl.rabbitmq.utils.RabbitMQUtil;

import java.util.HashMap;
import java.util.Map;

/**
 * @author yangl
 */
public class Producer {
    //队列名称
    public static final String QUEUE_NAME = "hello";

    //发消息
    public static void main(String[] args) throws Exception {
        Channel channel = RabbitMQUtil.getChannel();

        Map<String, Object> argments = new HashMap<>();
        //官方允许的是0-255之间，此处设置为10，允许优先级范围为0-10，不要设置过大，浪费CPU与内存
        argments.put("x-max-priority",10);

        /**
         * 生成一个队列
         * 1、队列名称
         * 2、队列里面的消息是否持久化（磁盘），默认情况下，消息存在内存中
         * 3、该队列是否只供一个消费者消费，是否进行消息共享，true：可以多个消费者消费，false：不允许多个消费者消费
         * 4、是否自动删除，最后一个消费者开连接之后，该队列是否自动删除，true：删除，false：不删除
         * 5、其他参数，比如延迟消息，死信消息
         */
        channel.queueDeclare(QUEUE_NAME, true, false, false, argments);
        //发送消息

        for (int i = 0; i < 20; i++) {
            String message = "hello world" + i;
            //设置优先级
            AMQP.BasicProperties properties = null;
            if(i == 5){
                properties = new AMQP.BasicProperties().builder().priority(5).build();
            }
            channel.basicPublish("", QUEUE_NAME, properties, message.getBytes());
        }
        /**
         * 发送一个消息
         * 1、发送到哪个交换机
         * 2、路由的key值是哪个，本次是队列名称
         * 3、其他参数信息
         * 4、发送的消息体
         */

        System.out.println("消息发送完毕");
    }
}
